package org.jeecg.modules.demo.gmslopedata.controller;

import com.alibaba.druid.pool.DruidDataSource;
import org.jeecg.common.system.vo.DynamicDataSourceModel;
import org.jeecg.common.util.dynamic.db.DataSourceCachePool;
import org.jeecg.common.util.dynamic.db.DynamicDBUtil;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

//@Component
public class DataSourceInitializer implements ApplicationRunner {
    
    @Override
    public void run(ApplicationArguments args) throws Exception {
        // 配置 PostgreSQL 数据源
        setupPostgresDataSource();
    }
    
    private void setupPostgresDataSource() {

        DruidDataSource postgresModel = new DruidDataSource();
        postgresModel.setName("postgres"); // 数据源名称
        postgresModel.setUrl("jdbc:postgresql://localhost:5432/postgres"); // 数据库连接URL
        postgresModel.setUsername("postgres"); // 数据库用户名
        postgresModel.setPassword("123456"); // 数据库密码
        postgresModel.setDriverClassName("org.postgresql.Driver"); // 数据库驱动类名
        postgresModel.setInitialSize(5); // 初始化连接数
        postgresModel.setMinIdle(5); // 最小空闲连接数
        postgresModel.setMaxActive(20); // 最大连接数
        postgresModel.setMaxWait(60000); // 连接最大等待时间，单位毫秒
        postgresModel.setTimeBetweenEvictionRunsMillis(60000); // 连接回收时间间隔，单位毫秒
        postgresModel.setMinEvictableIdleTimeMillis(300000); // 连接最小空闲时间，单位毫秒
        postgresModel.setValidationQuery("SELECT 1"); // 连接有效性检查SQL语句
        postgresModel.setTestWhileIdle(true); // 是否在空闲时检查连接有效性
        postgresModel.setTestOnBorrow(true); // 是否在借出连接时检查连接有效性
        postgresModel.setTestOnReturn(true); // 是否在归还连接时检查连接有效性
        postgresModel.setPoolPreparedStatements(true); // 是否启用预编译语句
        postgresModel.setMaxPoolPreparedStatementPerConnectionSize(20); // 每个连接的最大预编译语句数



        DataSourceCachePool.putCacheBasicDataSource("postgres", postgresModel);
        
        // 预热连接（可选）
        try {
            DynamicDBUtil.getDbSourceByDbKey("postgres");
            System.out.println("PostgreSQL 数据源初始化成功");
        } catch (Exception e) {
            System.err.println("PostgreSQL 数据源初始化失败: " + e.getMessage());
            e.printStackTrace();
        }
    }
}